﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
using System.Configuration;
//using System.Windows.

namespace WF_Office_Verwaltung
{
    class dbCon_klasse
    {
        nachrichten_klasse aNachrichtenKlasse = new nachrichten_klasse();
        /// <summary>
        /// liest die Tabelle bermerkung aus und gibt das Result-Set als string zurück
        /// </summary>
        /// <param name="akt_Kunde">Kundenobjekt von welchen man die bemerkungen auslesen will</param>
        /// <returns></returns>
        internal string get_bemerkung(Kunde akt_Kunde)
        {
            string s_bemerkung = "";
            try
            {
                using (var context = new project_entities())
                {
                    int id_kunde = akt_Kunde.ID_Kunde;
                    var bemerkung = (from b in context.Bemerkung
                                     where b.FK_Kunde == id_kunde
                                     select b).ToList();

                    if (bemerkung.Count != 0)
                    {
                        s_bemerkung = bemerkung[0].Bemerkung1;
                        return s_bemerkung;
                    }
                    return s_bemerkung;
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_klasse \n get_bemerkung \n\n", ex);
                throw;
            }
        }
        /// <summary>
        /// Bemerkungen werden hier in die Tabelle geschrieben (update wenn schon eine Bemerkung vorhanden, insert wenn noch keine bemerkung vorhanden)
        /// </summary>
        /// <param name="s_Bemerkung">Der Text welcher in die DB geschrieben werden soll als string(max 2000)</param>
        /// <param name="akt_Kunde">Kundenobjekt von welchen man die bemerkungen auslesen will</param>
        internal void save_bemerkung(string s_Bemerkung, Kunde akt_Kunde)
        {
            try
            {
                using (var context = new project_entities())
                {
                    int id_kunde = akt_Kunde.ID_Kunde;
                    var q_bemerkung = (from b in context.Bemerkung
                                       where b.FK_Kunde == id_kunde
                                       select b).ToList();
                    if (id_kunde != 0)
                    {
                        if (q_bemerkung.Count != 0)
                        {
                            context.sp_update_Bemerkung(akt_Kunde.ID_Kunde, q_bemerkung[0].ID_Bemerkung, s_Bemerkung);
                        }
                        else
                        {
                            context.sp_insert_Bemerkung(akt_Kunde.ID_Kunde, s_Bemerkung);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_klasse \n save_bemerkung \n\n", ex);
            }
        }

        internal object get_Kunde_as_List()
        {
            try
            {
                using (var context = new project_entities())
                {
                    var Kunde = (from k in context.Kunden
                                 select k).ToList<Kunde>();
                    return Kunde;
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_klasse \n get_Kunde_as_List \n\n", ex);
                throw;
            }
        }
        internal DateTime get_letzten_Wartungsvertrag_List(int akt_kunde)
        {
            try
            {
                using (var context = new project_entities())
                {
                    var letze_wartung = context.sp_get_letzter_Wartungsvertrag(akt_kunde).ToList();
                    DateTime dtLetzteWartung = DateTime.Parse("01.01.1000");
                    int j = 0;
                    for (int i = 0; i < letze_wartung.Count; i++)
                    {

                        if (!letze_wartung[i].Gelöscht && j == 0)
                        {
                            dtLetzteWartung = letze_wartung[i].letzte_wartung;
                            return dtLetzteWartung;
                        }
                    }
                    return dtLetzteWartung;
                }
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_klasse \n get_Kunde_as_List \n\n", ex);
                throw;
            }
        }
        internal SqlConnection getConnection()
        {
            try
            {
                string connection = ConfigurationManager.ConnectionStrings["simple_Conn"].ConnectionString;
                SqlConnection conn = new SqlConnection(connection);
                return conn;
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_Klasse: getConnection\n", ex);
                return null;
            }
        }

        internal SqlCommand getCommandSelectBLOB_OBJECT(int akt_Kunde, string dbFile, SqlConnection conn)
        {
            try
            {
                SqlCommand sqlCmd = new SqlCommand("SELECT BLOB_OBJECT, Name, FK_Kunde, Datum from Blob_Object where FK_Kunde = @aktKunde AND Datum = @Datum", conn);
                sqlCmd.Parameters.Add("@aktKunde", SqlDbType.Int).Value = akt_Kunde;
                sqlCmd.Parameters.Add("@Datum", SqlDbType.VarChar).Value = dbFile;
                return sqlCmd;
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_Klasse: getCommandSelectBLOB_OBJECT\n", ex);
                return null;

            }

        }
        internal SqlCommand getCommandInsertBLOB_OBJECT(byte[] fileData, string fileName, int Akt_Kunde, DateTime dateTime, bool? pdf, SqlConnection conn)
        {
            try
            {
                string query = "insert into BLOB_OBJECT (BLOB_OBJECT, Name, FK_Kunde, Datum, PDF) values (@BLOB_OBJECT, @Name, @Akt_Kunde, @Datum, @PDF)";
                SqlCommand command = new SqlCommand(query, conn);
                command.Parameters.Add("@BLOB_OBJECT", SqlDbType.VarBinary, fileData.Length).Value = fileData;
                command.Parameters.Add("@Name", SqlDbType.VarChar).Value = fileName;
                command.Parameters.Add("@Akt_Kunde", SqlDbType.Int).Value = Akt_Kunde;
                command.Parameters.Add("@Datum", SqlDbType.DateTime).Value = dateTime;
                if (pdf == null)
                {
                    command.Parameters.Add("@PDF", SqlDbType.Bit).Value = DBNull.Value;
                }
                else
                {
                    command.Parameters.Add("@PDF", SqlDbType.Bit).Value = pdf;
                }
                return command;
            }
            catch (Exception ex)
            {
                aNachrichtenKlasse.ErrorMessage("dbCon_Klasse: getCommandInsertBLOB_OBJECT\n", ex);
                return null;

            }
        }
    }
}
